#ifndef _CONFIG_H_
#define _CONFIG_H_

#ifdef CH58xBLE_ROM
#include "CH58xBLE_ROM.H"
#else
#include "CH58xBLE_LIB.H"
#endif

#include "CH58x_common.h"

/* 电路板类型 */
#define _V31_BOARD_                         0x0200 // 原 M157 板型
#define _V31_A_BOARD_                       0x0201 // 250105 板子有效

#define _V32_BOARD_                         0x0400 // 原 9905 板型
#define _V32_A_BOARD_                       0x0401 // 250103 板子有效
#define _V32_B_BOARD_                       0x0402 // 台湾定制板子有效

#define _V33_BOARD_                         0x0100 // 原 6681 板型
#define _V33_A_BOARD_                       0x0101 // 241216 板子有效
#define _V33_B_BOARD_                       0x0102 // 250422 板子有效
#define _V33_C_BOARD_                       0x0103 // 250525 板子有效

#define _DA01_BOARD_                        0x0800 // 门禁一体读头
#define _DA01_A_BOARD_                      0x0801 // 250326 板子有效
#define _DA01_B_BOARD_                      0x0802 // 250517 板子有效

#define _CR01_BU_                           0x1000 //  制卡器

// #define _CCCC_BOARD_                        0x2000 //
// C8H
// 制卡器
// CR01_BU
// 制卡器-蓝牙USB版本 
// #define _CR01_BU_                             0x2000 // 制卡器

/* 定义开锁类型 */
#define _UNLOCK_MOTOR_                      1 // 电机
#define _UNLOCK_REALY_                      2 // 继电器

/* 定义联网模组类型 */
#define _RS485_MODULE_                      1 // 485
#define _ML307R_MODLE_                      2 // 中移CAT.1模组
#define _TP1107_MODULE_                     3 // 技象模组

/* 定时外部验证模组类型 */
#define _FACE_SAFETY_MODULE_                1 // 人脸
#define _QRCODE_SAFETY_MODULE_              2 // 二维码
#define _FINGER_SAFETY_MODULE_              3 // 指纹
#define _PALM_VEIN_SAFETY_MODULE_           4 // 掌纹

/* 定义播放音效类型 */
#define _VOICE_PLAY_BUZZ_                   1 // 蜂鸣器
#define _VOICE_PLAY_SPEAKER_                2 // 喇叭

/* 定义蜂鸣器类型 */
#define _ACTIVE_BUZZER_                     1 // 有缘蜂鸣器
#define _PASSIVE_BUZZER_                    2 // 无缘蜂鸣器

/* 定义实时时间输入源类型 */
#define _INTERNAL_CLOCK_SOURCE_             1 // 内部时钟源
#define _EXTERNAL_CLOCK_SOURCE_             2 // 外部时钟源

/* 网络功能使能 */
#define _TCP_NETWORK_SERVICE_               1 // TCP
#define _MQTT_NETWORK_SERVICE_              2 // MQTT

/* 人脸模组型号 */
#define _AIVA_FACE_MODEL_                   1 // AIVA
#define _SENSETIME_FACE_MODEL_              2 // 商汤

#ifndef BLE_MAC
#define BLE_MAC                             FALSE
#endif

#ifndef DCDC_ENABLE
#define DCDC_ENABLE                         FALSE
#endif

#ifndef HAL_SLEEP
#define HAL_SLEEP                           FALSE
#endif

#ifndef SLEEP_RTC_MIN_TIME                   
#define SLEEP_RTC_MIN_TIME                  US_TO_RTC(1000)
#endif

#ifndef SLEEP_RTC_MAX_TIME                   
#define SLEEP_RTC_MAX_TIME                  MS_TO_RTC(RTC_TO_MS(RTC_TIMER_MAX_VALUE) - 1000 * 60 * 60)
#endif

#ifndef WAKE_UP_RTC_MAX_TIME
#define WAKE_UP_RTC_MAX_TIME                US_TO_RTC(2000)
#endif

#ifndef TEM_SAMPLE
#define TEM_SAMPLE                          FALSE
#endif

#ifndef BLE_CALIBRATION_ENABLE
#define BLE_CALIBRATION_ENABLE              FALSE
#endif

#ifndef BLE_CALIBRATION_PERIOD
#define BLE_CALIBRATION_PERIOD              120000
#endif

#ifndef BLE_SNV
#define BLE_SNV                             FALSE
#endif

#ifndef BLE_SNV_ADDR
#define BLE_SNV_ADDR                        0x77E00 - FLASH_ROM_MAX_SIZE
#endif

#ifndef BLE_SNV_BLOCK
#define BLE_SNV_BLOCK                       256
#endif

#ifndef BLE_SNV_NUM
#define BLE_SNV_NUM                         1
#endif

#ifndef CLK_OSC32K
#define CLK_OSC32K                          1
#endif

#ifndef BLE_MEMHEAP_SIZE
#define BLE_MEMHEAP_SIZE                    (1024 * 24)
#endif

#ifndef BLE_BUFF_MAX_LEN
#define BLE_BUFF_MAX_LEN                    251
#endif

#ifndef BLE_BUFF_NUM
#define BLE_BUFF_NUM                        5
#endif

#ifndef BLE_TX_NUM_EVENT
#define BLE_TX_NUM_EVENT                    1
#endif

#ifndef BLE_TX_POWER
#define BLE_TX_POWER                        LL_TX_POWEER_0_DBM
#endif

#ifndef PERIPHERAL_MAX_CONNECTION
#define PERIPHERAL_MAX_CONNECTION           1
#endif

#ifndef CENTRAL_MAX_CONNECTION
#define CENTRAL_MAX_CONNECTION              3
#endif

// 电路板类型
#ifndef _BOARD_TYPE_
#define _BOARD_TYPE_                        _CR01_BU_
#endif

// 加密配置位
#ifndef _ENABLE_ENCRYPTION_
#define _ENABLE_ENCRYPTION_                 TRUE
#endif

// 外部验证
#ifndef _EXTERNAL_VALIDATION_EN
#define _EXTERNAL_VALIDATION_EN_            FALSE
#endif

// DNS 使能位
#ifndef _DNS_SERVICE_ENABLE_
#define _DNS_SERVICE_ENABLE_                FALSE
#endif

// 霍尔传感器使能位
#ifndef _HALL_SENSOR_ENABLE_
#define _HALL_SENSOR_ENABLE_                FALSE
#endif

// 防撬检测使能位
#ifndef _ANTI_SKID_DETECTION_ENABLE_
#define _ANTI_SKID_DETECTION_ENABLE_        FALSE
#endif

// 斜舌检测使能位
#ifndef _BEVELED_LATCH_DETECTION_ENABLE_
#define _BEVELED_LATCH_DETECTION_ENABLE_    FALSE
#endif

// 方舌检测使能位
#ifndef _SQUARE_LATCH_DETECTION_ENABLE_
#define _SQUARE_LATCH_DETECTION_ENABLE_     FALSE
#endif

// 锁舌检测使能位
#ifndef _LOCK_LATCH_DETECTION_ENABLE_
#define _LOCK_LATCH_DETECTION_ENABLE_       FALSE
#endif

// 出门按钮
#ifndef _EXIT_BUTTON_DETECTION_ENABLE_
#define _EXIT_BUTTON_DETECTION_ENABLE_      FALSE
#endif

// 开锁方式
#ifndef _UNLOCK_TYPE_
#define _UNLOCK_TYPE_                       _UNLOCK_MOTOR_
#endif

// 网络模组类型
#ifndef _NETWOK_MODLE_TYPE_
#define _NETWOK_MODLE_TYPE_                 _RS485_MODULE_
#endif

// 外部验证模组类型
#ifndef _SAFETY_MODULE_TYPE_
#define _SAFETY_MODULE_TYPE_                _FACE_SAFETY_MODULE_
#endif

// 音频播放类型
#ifndef _VOICE_PLAY_TYPE_
#define _VOICE_PLAY_TYPE_                   _VOICE_PLAY_BUZZ_
#endif

// 蜂鸣器类型
#ifndef _BUZZER_TYPE_
#define _BUZZER_TYPE_                       _PASSIVE_BUZZER_
#endif

// 实时时钟类型
#ifndef _REAL_TIME_CLOCK_SOURCE_
#define _REAL_TIME_CLOCK_SOURCE_            _EXTERNAL_CLOCK_SOURCE_
#endif

// 网络服务类型
#ifndef _NETWORK_SERVICE_TYPE_
#define _NETWORK_SERVICE_TYPE_              _TCP_NETWORK_SERVICE_
#endif

// 人脸模组类型
#ifndef _FACE_MODULE_TYPE_
#define _FACE_MODULE_TYPE_                  _AIVA_FACE_MODEL_
#endif

/* 相关功能配置项 */
#if ((_BOARD_TYPE_ & _V31_BOARD_) == _V31_BOARD_)
#define _RFID_FUNCTION_ENABLE_                TRUE
#define _KEYBOARD_FUNCTION_ENABLE_            FALSE
#define _SAFETY_VERIFYFUNCTION_ENABLE_        FALSE
#define _NETWOK_FUNCTION_ENABLE_              FALSE

#elif ((_BOARD_TYPE_ & _V32_BOARD_) == _V32_BOARD_)
#define _RFID_FUNCTION_ENABLE_                TRUE
#define _KEYBOARD_FUNCTION_ENABLE_            FALSE
#define _SAFETY_VERIFYFUNCTION_ENABLE_        FALSE
#define _NETWOK_FUNCTION_ENABLE_              FALSE

#elif ((_BOARD_TYPE_ & _V33_BOARD_) == _V33_BOARD_)
#define _RFID_FUNCTION_ENABLE_                FALSE
#define _KEYBOARD_FUNCTION_ENABLE_            FALSE
#define _SAFETY_VERIFYFUNCTION_ENABLE_        FALSE
#define _NETWOK_FUNCTION_ENABLE_              TRUE

#elif ((_BOARD_TYPE_ & _DA01_BOARD_) == _DA01_BOARD_)
#define _RFID_FUNCTION_ENABLE_                TRUE
#define _KEYBOARD_FUNCTION_ENABLE_            FALSE
#define _SAFETY_VERIFYFUNCTION_ENABLE_        FALSE
#define _NETWOK_FUNCTION_ENABLE_              FALSE

#elif ((_BOARD_TYPE_ & _CR01_BU_) == _CR01_BU_)
#define _RFID_FUNCTION_ENABLE_                TRUE
#define _KEYBOARD_FUNCTION_ENABLE_            FALSE
#define _SAFETY_VERIFYFUNCTION_ENABLE_        FALSE
#define _NETWOK_FUNCTION_ENABLE_              TRUE

#endif

extern const uint8_t MacAddr[6];
extern uint32_t MEM_BUF[BLE_MEMHEAP_SIZE / 4];

#endif
